{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: pandasai[google-ai] in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (2.0.21)\n",
      "Requirement already satisfied: astor<0.9.0,>=0.8.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (0.8.1)\n",
      "Requirement already satisfied: duckdb<1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (0.10.0)\n",
      "Requirement already satisfied: faker<20.0.0,>=19.12.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (19.13.0)\n",
      "Requirement already satisfied: jinja2<4.0.0,>=3.1.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (3.1.3)\n",
      "Requirement already satisfied: matplotlib<4.0.0,>=3.7.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (3.8.3)\n",
      "Requirement already satisfied: openai<2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (1.14.0)\n",
      "Requirement already satisfied: pandas<3.0,>=2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (2.2.1)\n",
      "Requirement already satisfied: pillow<11.0.0,>=10.1.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (10.2.0)\n",
      "Requirement already satisfied: pydantic<3,>=1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (2.6.4)\n",
      "Requirement already satisfied: python-dotenv<2.0.0,>=1.0.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (1.0.1)\n",
      "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (2.31.0)\n",
      "Requirement already satisfied: scipy<2.0.0,>=1.9.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (1.12.0)\n",
      "Requirement already satisfied: sqlalchemy<3,>=1.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (2.0.28)\n",
      "Requirement already satisfied: google-cloud-aiplatform<2.0.0,>=1.26.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (1.44.0)\n",
      "Requirement already satisfied: google-generativeai<0.4.0,>=0.3.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[google-ai]) (0.3.2)\n",
      "Requirement already satisfied: python-dateutil>=2.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from faker<20.0.0,>=19.12.0->pandasai[google-ai]) (2.9.0)\n",
      "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.17.1)\n",
      "Requirement already satisfied: google-auth<3.0.0dev,>=2.14.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.28.2)\n",
      "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.23.0)\n",
      "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.19.5 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (4.25.3)\n",
      "Requirement already satisfied: packaging>=14.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (24.0)\n",
      "Requirement already satisfied: google-cloud-storage<3.0.0dev,>=1.32.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.15.0)\n",
      "Requirement already satisfied: google-cloud-bigquery<4.0.0dev,>=1.15.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (3.19.0)\n",
      "Requirement already satisfied: google-cloud-resource-manager<3.0.0dev,>=1.3.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.12.3)\n",
      "Requirement already satisfied: shapely<3.0.0dev in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.0.3)\n",
      "Requirement already satisfied: google-ai-generativelanguage==0.4.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-generativeai<0.4.0,>=0.3.2->pandasai[google-ai]) (0.4.0)\n",
      "Requirement already satisfied: typing-extensions in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-generativeai<0.4.0,>=0.3.2->pandasai[google-ai]) (4.10.0)\n",
      "Requirement already satisfied: tqdm in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-generativeai<0.4.0,>=0.3.2->pandasai[google-ai]) (4.66.2)\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from jinja2<4.0.0,>=3.1.3->pandasai[google-ai]) (2.1.5)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (1.2.0)\n",
      "Requirement already satisfied: cycler>=0.10 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (4.49.0)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (1.4.5)\n",
      "Requirement already satisfied: numpy<2,>=1.21 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (1.26.4)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (3.1.2)\n",
      "Requirement already satisfied: importlib-resources>=3.2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (6.3.0)\n",
      "Requirement already satisfied: anyio<5,>=3.5.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[google-ai]) (4.3.0)\n",
      "Requirement already satisfied: distro<2,>=1.7.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[google-ai]) (1.9.0)\n",
      "Requirement already satisfied: httpx<1,>=0.23.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[google-ai]) (0.27.0)\n",
      "Requirement already satisfied: sniffio in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[google-ai]) (1.3.1)\n",
      "Requirement already satisfied: pytz>=2020.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandas<3.0,>=2.0->pandasai[google-ai]) (2024.1)\n",
      "Requirement already satisfied: tzdata>=2022.7 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandas<3.0,>=2.0->pandasai[google-ai]) (2024.1)\n",
      "Requirement already satisfied: annotated-types>=0.4.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pydantic<3,>=1->pandasai[google-ai]) (0.6.0)\n",
      "Requirement already satisfied: pydantic-core==2.16.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pydantic<3,>=1->pandasai[google-ai]) (2.16.3)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[google-ai]) (3.3.2)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[google-ai]) (3.6)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[google-ai]) (2.2.1)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[google-ai]) (2024.2.2)\n",
      "Requirement already satisfied: greenlet!=0.4.17 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from sqlalchemy<3,>=1.4->pandasai[google-ai]) (3.0.3)\n",
      "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from anyio<5,>=3.5.0->openai<2->pandasai[google-ai]) (1.2.0)\n",
      "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.63.0)\n",
      "Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.62.1)\n",
      "Requirement already satisfied: grpcio-status<2.0.dev0,>=1.33.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.34.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.62.1)\n",
      "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-auth<3.0.0dev,>=2.14.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (5.3.3)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-auth<3.0.0dev,>=2.14.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (0.3.0)\n",
      "Requirement already satisfied: rsa<5,>=3.1.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-auth<3.0.0dev,>=2.14.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (4.9)\n",
      "Requirement already satisfied: google-cloud-core<3.0.0dev,>=1.6.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.4.1)\n",
      "Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (2.7.0)\n",
      "Requirement already satisfied: grpc-google-iam-v1<1.0.0dev,>=0.12.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-resource-manager<3.0.0dev,>=1.3.3->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (0.13.0)\n",
      "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from google-cloud-storage<3.0.0dev,>=1.32.0->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (1.5.0)\n",
      "Requirement already satisfied: httpcore==1.* in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from httpx<1,>=0.23.0->openai<2->pandasai[google-ai]) (1.0.4)\n",
      "Requirement already satisfied: h11<0.15,>=0.13 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai<2->pandasai[google-ai]) (0.14.0)\n",
      "Requirement already satisfied: zipp>=3.1.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib<4.0.0,>=3.7.1->pandasai[google-ai]) (3.17.0)\n",
      "Requirement already satisfied: six>=1.5 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from python-dateutil>=2.4->faker<20.0.0,>=19.12.0->pandasai[google-ai]) (1.16.0)\n",
      "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0.0dev,>=2.14.1->google-cloud-aiplatform<2.0.0,>=1.26.1->pandasai[google-ai]) (0.5.1)\n",
      "Requirement already satisfied: pandasai[excel] in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (2.0.21)\n",
      "Requirement already satisfied: astor<0.9.0,>=0.8.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (0.8.1)\n",
      "Requirement already satisfied: duckdb<1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (0.10.0)\n",
      "Requirement already satisfied: faker<20.0.0,>=19.12.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (19.13.0)\n",
      "Requirement already satisfied: jinja2<4.0.0,>=3.1.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (3.1.3)\n",
      "Requirement already satisfied: matplotlib<4.0.0,>=3.7.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (3.8.3)\n",
      "Requirement already satisfied: openai<2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (1.14.0)\n",
      "Requirement already satisfied: pandas<3.0,>=2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (2.2.1)\n",
      "Requirement already satisfied: pillow<11.0.0,>=10.1.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (10.2.0)\n",
      "Requirement already satisfied: pydantic<3,>=1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (2.6.4)\n",
      "Requirement already satisfied: python-dotenv<2.0.0,>=1.0.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (1.0.1)\n",
      "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (2.31.0)\n",
      "Requirement already satisfied: scipy<2.0.0,>=1.9.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (1.12.0)\n",
      "Requirement already satisfied: sqlalchemy<3,>=1.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (2.0.28)\n",
      "Requirement already satisfied: openpyxl<4.0.0,>=3.0.7 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandasai[excel]) (3.1.2)\n",
      "Requirement already satisfied: python-dateutil>=2.4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from faker<20.0.0,>=19.12.0->pandasai[excel]) (2.9.0)\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from jinja2<4.0.0,>=3.1.3->pandasai[excel]) (2.1.5)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (1.2.0)\n",
      "Requirement already satisfied: cycler>=0.10 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (0.12.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (4.49.0)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (1.4.5)\n",
      "Requirement already satisfied: numpy<2,>=1.21 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (1.26.4)\n",
      "Requirement already satisfied: packaging>=20.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (24.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (3.1.2)\n",
      "Requirement already satisfied: importlib-resources>=3.2.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (6.3.0)\n",
      "Requirement already satisfied: anyio<5,>=3.5.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (4.3.0)\n",
      "Requirement already satisfied: distro<2,>=1.7.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (1.9.0)\n",
      "Requirement already satisfied: httpx<1,>=0.23.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (0.27.0)\n",
      "Requirement already satisfied: sniffio in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (1.3.1)\n",
      "Requirement already satisfied: tqdm>4 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (4.66.2)\n",
      "Requirement already satisfied: typing-extensions<5,>=4.7 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openai<2->pandasai[excel]) (4.10.0)\n",
      "Requirement already satisfied: et-xmlfile in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from openpyxl<4.0.0,>=3.0.7->pandasai[excel]) (1.1.0)\n",
      "Requirement already satisfied: pytz>=2020.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandas<3.0,>=2.0->pandasai[excel]) (2024.1)\n",
      "Requirement already satisfied: tzdata>=2022.7 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pandas<3.0,>=2.0->pandasai[excel]) (2024.1)\n",
      "Requirement already satisfied: annotated-types>=0.4.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pydantic<3,>=1->pandasai[excel]) (0.6.0)\n",
      "Requirement already satisfied: pydantic-core==2.16.3 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from pydantic<3,>=1->pandasai[excel]) (2.16.3)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[excel]) (3.3.2)\n",
      "Requirement already satisfied: idna<4,>=2.5 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[excel]) (3.6)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[excel]) (2.2.1)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from requests<3.0.0,>=2.31.0->pandasai[excel]) (2024.2.2)\n",
      "Requirement already satisfied: greenlet!=0.4.17 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from sqlalchemy<3,>=1.4->pandasai[excel]) (3.0.3)\n",
      "Requirement already satisfied: exceptiongroup>=1.0.2 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from anyio<5,>=3.5.0->openai<2->pandasai[excel]) (1.2.0)\n",
      "Requirement already satisfied: httpcore==1.* in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from httpx<1,>=0.23.0->openai<2->pandasai[excel]) (1.0.4)\n",
      "Requirement already satisfied: h11<0.15,>=0.13 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai<2->pandasai[excel]) (0.14.0)\n",
      "Requirement already satisfied: zipp>=3.1.0 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib<4.0.0,>=3.7.1->pandasai[excel]) (3.17.0)\n",
      "Requirement already satisfied: six>=1.5 in /home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages (from python-dateutil>=2.4->faker<20.0.0,>=19.12.0->pandasai[excel]) (1.16.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install pandasai[google-ai]\n",
    "!pip install pandasai[excel]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pip install pandasai[google-ai]\n",
    "pip install pandasai[excel]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'The top 5 countries by sales are: China, United States, Japan, Germany, United Kingdom'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from pandasai import SmartDataframe\n",
    "from pandasai.llm import OpenAI\n",
    "\n",
    "# Sample DataFrame\n",
    "sales_by_country = pd.DataFrame({\n",
    "    \"country\": [\"United States\", \"United Kingdom\", \"France\", \"Germany\", \"Italy\", \"Spain\", \"Canada\", \"Australia\", \"Japan\", \"China\"],\n",
    "    \"sales\": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]\n",
    "})\n",
    "api_key='apikey'\n",
    "# Instantiate a LLM\n",
    "llm = OpenAI(api_token=api_key)\n",
    "\n",
    "df = SmartDataframe(sales_by_country, config={\"llm\": llm})\n",
    "df.chat('Which are the top 5 countries by sales?')\n",
    "# Output: China, United States, Japan, Germany, Australia\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIjCAYAAAD1OgEdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbxklEQVR4nO3deVyU5f7/8fegMCAIqCm4IGq4b7mlZKUmioWlZYtlaqZ2NLTUSvObx606lmWWx+1kpnnScmlzOWpGLh0lNT2YmaIVpaWApYCagsL1+6MH988RREBuBuX1fDzm8XDu+5p7Ptc1c9/D23vmuh3GGCMAAAAAQJHycHcBAAAAAHA9ImwBAAAAgA0IWwAAAABgA8IWAAAAANiAsAUAAAAANiBsAQAAAIANCFsAAAAAYAPCFgAAAADYgLAFAAAAADYgbAEAik3Hjh3VsWPHYn1Oh8OhYcOGFetzAgAgEbYAAHnYu3ev7r//foWGhsrb21vVq1dXly5d9M9//tPdpZVISUlJevbZZ9WgQQOVK1dOvr6+atWqlV566SWlpKS4uzxJ0pIlS/Tmm2+6uwwAKBXKursAAEDJtG3bNnXq1Ek1a9bU4MGDFRwcrCNHjujrr7/WW2+9peHDh7u7xBJl586duuuuu3T69Gk9+uijatWqlSTpm2++0SuvvKItW7bo888/d3OVf4Wt7777TiNGjHB3KQBw3SNsAQBy9fLLLysgIEA7d+5UYGCgy7rk5GT3FFVCpaSk6N5771WZMmX0v//9Tw0aNHBZ//LLL2vevHluqq7wzp07Jy8vL3l48EUYACgMjp4AgFz9+OOPaty4cY6gJUlVqlRxub9gwQLdcccdqlKlipxOpxo1aqQ5c+bk63nS09M1YcIEhYWFyel0KiQkRKNHj1Z6erpLuw0bNujWW29VYGCg/Pz8VL9+ff3f//1fvvuzePFi1a9fX97e3mrVqpW2bNlirdu4caMcDoc++eSTHI9bsmSJHA6HYmNjL7vtf/3rX/rtt9/0xhtv5AhakhQUFKRx48a5LJs9e7YaN24sp9OpatWqKTo6OsdXDWvVqqXHHnssx/Yu/e3bpk2b5HA4tGzZMr388suqUaOGvL291blzZ/3www8uj1uzZo1++eUXORwOORwO1apVy2UbH374ocaNG6fq1aurXLlyiouLk8Ph0PTp03PUsW3bNjkcDn3wwQeXHRsAKM04swUAyFVoaKhiY2P13XffqUmTJnm2nTNnjho3bqx77rlHZcuW1apVq/Tkk08qKytL0dHRl31cVlaW7rnnHv33v//VE088oYYNG2rv3r2aPn26Dh48qE8//VSStG/fPnXv3l3NmjXT5MmT5XQ69cMPP2jr1q356svmzZu1dOlSPfXUU3I6nZo9e7a6deumHTt2qEmTJurYsaNCQkK0ePFi3XvvvS6PXbx4sW688UaFh4dfdvsrV66Uj4+P7r///nzVM3HiRE2aNEkREREaOnSo4uPjNWfOHO3cuVNbt26Vp6dnvrZzqVdeeUUeHh569tlnlZqaqqlTp6pPnz7avn27JOmFF15Qamqqfv31Vys8+fn5uWzjxRdflJeXl5599lmlp6erQYMGat++vRYvXqyRI0e6tF28eLHKly+vHj16FKpeALjuGQAAcvH555+bMmXKmDJlypjw8HAzevRos379epORkZGj7Z9//pljWWRkpKlTp47Lsg4dOpgOHTpY9//9738bDw8P89VXX7m0mzt3rpFktm7daowxZvr06UaSOX78eIH7IclIMt9884217JdffjHe3t7m3nvvtZaNHTvWOJ1Ok5KSYi1LTk42ZcuWNRMmTMjzOSpUqGCaN2+er3qSk5ONl5eX6dq1q8nMzLSWz5w500gy7777rrUsNDTU9O/fP8c2Lh3HjRs3GkmmYcOGJj093Vr+1ltvGUlm79691rKoqCgTGhqaY5vZ26hTp06O1/Nf//qXkWT2799vLcvIyDA33HBDrvUBAP7C1wgBALnq0qWLYmNjdc8992jPnj2aOnWqIiMjVb16da1cudKlrY+Pj/Xv1NRU/f777+rQoYN++uknpaamXvY5li9froYNG6pBgwb6/fffrdsdd9wh6a+v90myvsr42WefKSsrq8B9CQ8PtyaskKSaNWuqR48eWr9+vTIzMyVJ/fr1U3p6ulasWGG1W7p0qS5cuKBHH300z+2npaWpfPny+arliy++UEZGhkaMGOHyW6jBgwfL399fa9asKUjXXAwYMEBeXl7W/dtuu02S9NNPP+V7G/3793d5PSXpwQcflLe3txYvXmwtW79+vX7//fcrjg0AlGaELQDAZbVp00Yff/yxTp48qR07dmjs2LE6deqU7r//fn3//fdWu61btyoiIkK+vr4KDAxU5cqV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7tXAgQMVERGhsWPHatWqVZoyZUqRFwkAAAAA15oCha24uDh17tzZuv/hhx+qbdu2mjdvnkaOHKkZM2ZYk2UAAAAAQGlWoLB18uRJBQUFWfc3b96sO++807rfpk0bHTlypOiqAwAAAIBrVIHCVlBQkDXle0ZGhnbv3q127dpZ60+dOiVPT8+irRAAAAAArkEFClt33XWXnn/+eX311VcaO3asypUrp9tuu81a/+233+rGG28s8iIBAAAA4FpTtiCNX3zxRd13333q0KGD/Pz89N5778nLy8ta/+6776pr165FXiQAAAAAXGsKdZ2t1NRU+fn5qUyZMi7LT5w4IT8/P5cAdj3gOlvuUVKupYDSpTTsWxL7F4BrUGk4QHOdrTyVlM+ugmSDAp3ZyhYQEJDr8ooVKxZmcwAAAABw3SnQb7YAAAAAAPlD2AIAAAAAGxC2AAAAAMAGhC0AAAAAsAFhCwAAAABsQNgCAAAAABsQtgAAAADABoQtAAAAALABYQsAAAAAbFDW3QUAdnBMcri7BNuZCcbdJQAAACAPnNkCAAAAABsQtgAAAADABoQtAAAAALABYQsAAAAAbEDYAgAAAAAbELYAAAAAwAaELQAAAACwgVvD1pw5c9SsWTP5+/vL399f4eHhWrt2rbX+3Llzio6OVqVKleTn56devXopKSnJZRuHDx9WVFSUypUrpypVqui5557ThQsXXNps2rRJLVu2lNPpVFhYmBYuXFgc3QMAAABQirk1bNWoUUOvvPKKdu3apW+++UZ33HGHevTooX379kmSRo4cqVWrVmn58uXavHmzjh49qvvuu896fGZmpqKiopSRkaFt27bpvffe08KFCzV+/HirTUJCgqKiotSpUyfFxcVpxIgRGjRokNavX1/s/QUAAABQejiMMcbdRVysYsWKeu2113T//fercuXKWrJkie6//35J0oEDB9SwYUPFxsaqXbt2Wrt2rbp3766jR48qKChIkjR37lyNGTNGx48fl5eXl8aMGaM1a9bou+++s56jd+/eSklJ0bp16/JVU1pamgICApSamip/f/+i73QhOBzursB+V/POdEy6/gfITChRu+51ozTsW9LV7V8A4Bal4QB9FQdnhqf4FCQblJjfbGVmZurDDz/UmTNnFB4erl27dun8+fOKiIiw2jRo0EA1a9ZUbGysJCk2NlZNmza1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XnzxRdO3b1/j6+tratasaT777DPz0EMPmeDgYOPr62uaNm1qdu7cafUlOjraPP3006ZSpUqmY8eOxhhjpk2bZpo0aWLKlStnatSoYYYOHWpOnTplPU/267pu3TrToEED4+vrayIjI83Ro0dd6pk/f75Vb3BwsImOjrbWnTx50gwcONDccMMNpnz58qZTp04mLi7usq/N1YiMjDQ1atQwp0+fznV9VlZWvmqaMGGCad68uZk3b56pVauWcTgcxhhjJJm5c+eaqKgo4+PjYxo0aGC2bdtmDh06ZDp06GDKlStnwsPDzQ8//GBt64cffjD33HNPjn3mYld6b3Xq1MllTI0xJjk52Xh6epovvvji6gatALL3m/79++fYzxMSEsyFCxfM448/bmrVqmW8vb1NvXr1zJtvvpnrNowx5r333jMVK1Y0586dc2nTo0cP8+ijjxZXtwolP8dRSWb27NmmW7duxtvb29SuXdssX77cpc3o0aNN3bp1jY+Pj6ldu7YZN26cy+dE9nsxW34+W4rTnXfeaapXr57rPpd9TCuK48yOHTtMRESEqVSpkvH39ze333672bVrl8vz5eez4ErjfbVOnTpl/Pz8zIEDB8xDDz1kXn755Rz9vFj2Z0S2uLg407FjR+Pn52fKly9vWrZsaXbu3Gk2btyYY5+bMGGCMeav48fkyZNN3759Tfny5U3//v3z1dfLvbeyrV271rRv394EBASYihUrmqioKJdjm50uruVKdSQkJBhJ5oMPPjDh4eHG6XSaxo0bu+ybBTk2lZR9Ky/52e8kmXnz5pmePXsaHx8fExYWZj777DOrXfZ7Krt9Ue2H1yPCVjErSNjy9/c3Q4YMMfv37zerVq0y5cqVM2+//bbV5uKwlZycbCSZBQsWmGPHjpnk5GRjjDFbtmwx/v7+ZuHChebHH380n3/+ualVq5aZOHGiMcaYzMxM06RJE9O5c2cTFxdnNm/ebFq0aJFn2Dh//rzx8/MzI0aMyPFHTrbL1dOqVStzxx13mL1795qDBw+acePGGW9vb/P666+bgIAA88cff5gaNWqYm266yZQvX97069fP7N+/37z99ttGknnwwQfNwYMHzdatW42Xl5dp06aNMcZYH4p/+9vfzI4dO0xMTIx56623bOl/9uvTo0cPM3r0aOPn55frH6y5ha2KFSuaWbNmmUOHDpkp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ysrKUpMmTQo05kWhKOrI77GppOxbecnPfpetoP0pjv3wWkTYKmb169fX559/nmP57t27Va9evavatqenp8uZC0lq2bKl4uPjFRYWlutjGjZsqCNHjujYsWOqWrWqJOnrr78u1PM3atTIZer13Oo5c+aMfH19rQP/6dOn9fPPP6tq1apW/728vHJ8oLRs2VJfffWV6tSpY/WlbNmyqly5shW0PD091aRJE/Xq1UsTJkxQYGCgbrzxRlv7Hxoaqs2bN1uBa926dVcMXJdTv359vf/++0pPT5fT6ZT01/T2l9a7cuVKl2WX1tuwYcMcU0dv3bpV9erVc/kft6u1a9cuZWVladq0afLw+Osk+bJlywq0jfLly6tWrVqKiYlRp06dcqxv2bKlEhMTVbZsWet/I+1SqVIldenSRTNnztTw4cMvG5aKsybpr9fusccey7HPFFTTpk3VunVrzZs3T0uWLNHMmTOLuNKC8fLyynF82Lp1q2655RY9+eST1rL8/M/8oEGD9Oabb+q3335TRESEQkJCirze4nLpcfTrr79Wv379XO63aNFCkrRt2zaFhobqhRdesNb/8ssvxVbr1apYsaIiIyM1a9YsPfXUUzn2uZSUlCI5zkh/vbdmz56tu+66S9Jf//H3+++/W+vz81lg53hfuHBBixYt0rRp09S1a1eXdT179tQHH3yg0NBQnTp1yvoclaS4uLgc26pXr57q1aunkSNH6uGHH9aCBQt077335rrPXc7V9vWPP/5QfHy85s2bp9tuu02S9N///jffjy8qBanj66+/1u233y7pr9dj165dGjZsmKTCH5tKovzsd3ZdIuBK++H1iq8RFrOhQ4fq4MGDeuqpp/Ttt98qPj5eb7zxhj744AM988wzV7Xt7D9aExMTdfLkSUnS+PHjtWjRIk2aNEn79u3T/v379eGHH2rcuHGSpIiICNWrV0/9+/fXnj179NVXX7kcXHPzxx9/6I477tD777+vb7/9VgkJCVq+fLmmTp2qHj165FlPy5YtlZycrIcffljLly/XPffco3PnzungwYNW/2vVqqWkpCSdO3fO2gnHjBmjo0eP6tChQ4qLi9OhQ4f0559/6qOPPpIkrV69WoGBgVq6dKl27typuXPnKisrS6NGjSry/l8qJCREmzZtUnJysiIjI62vfxXUI488oqysLD3xxBPav3+/1q9fr9dff13S/z/bMWTIEB06dEjPPfec4uPjtWTJkhxf3XzmmWcUExOjF198UQcPHtR7772nmTNn6tlnny1UXZcTFham8+fP65///Kd++ukn/fvf/9bcuXMLvJ2JEydq2rRpmjFjhg4dOqTdu3frn//8p6S/Xp/w8HD17NlTn3/+uX7++Wdt27ZNL7zwgr755psi7Y8kzZ49WxcuXFDr1q21dOlS7d+/X/Hx8Xr//fd14MABlSlTpthrqlu3rj7++GPFxcVpz5491vukMAYNGqRXXnlFxpgr/k+33WrVqqXt27fr559/1u+//66srCzVrVtX33zzjdavX6+DBw/q73//e47/cMjNI488ol9//VXz5s3T448/XgzVX738HkeXL1+ud999VwcPHtSECRO0Y8cO6w/AunXr6vDhw/rwww/1448/asaMGfrkk0/c1aVCmTVrljIzM3XzzTfro48+0qFDh7R//37NmDFD4eHhRXacqVu3rv79739r//792r59u/r06eNyZj0/nwV2jvfq1at18uRJDRw4UE2aNHG59erVS/Pnz1fbtm1Vrlw5/d///Z9+/PHHHMf/s2fPatiwYdq0aZN++eUXbd26VTt37lTDhg0l/bXPnT59WjExMfr999/zvG7g1fa1QoUKqlSpkt5++2398MMP+vLLLzVq1KhCj09hFaSOWbNm6ZNPPtGBAwcUHR2tkydPWseTwh6bSqor7Xd2udJ+eN1y14/FSrMdO3aYLl26mMqVK5uAgADTtm3bHD/Aze3HnU8//bTp0KGDdf/SCTJWrlxpwsLCTNmyZV2mfl+3bp255ZZbjI+Pj/H39zc333yzy+w48fHx5tZbbzVeXl6mXr16Zt26dXn+KPjcuXPm+eefNy1btjQBAQGmXLlypn79+mbcuHHmzz//zLOehIQE06pVK+Ph4WE8PDyMj4+PKV++vOnevbv1uNjYWFOhQgXj4eHh8sPf3r17mwoVKhg/Pz/j6+trPD09zV133WWM+WsihcaNG1uP8fT0tCYDKOr+X+71+fXXX03dunVNu3btTGpqaq4TZFz8ehljTPPmza3pd435a+r3Zs2aGS8vL9OqVSuzZMkSI8maVc6Yv2aoCgsLM06n09x2223m3XffvezU756enqZmzZrmtddec3ne3GqRZDp16mT1K/tHw//73/8uO5nBG2+8YapW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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Traceback (most recent call last):\n",
      "  File \"/home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages/pandasai/pipelines/chat/generate_chat_pipeline.py\", line 281, in run\n",
      "    output = (self.code_generation_pipeline | self.code_execution_pipeline).run(\n",
      "  File \"/home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages/pandasai/pipelines/pipeline.py\", line 137, in run\n",
      "    raise e\n",
      "  File \"/home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages/pandasai/pipelines/pipeline.py\", line 101, in run\n",
      "    step_output = logic.execute(\n",
      "  File \"/home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages/pandasai/pipelines/chat/code_execution.py\", line 115, in execute\n",
      "    {\"content_type\": \"response\", \"value\": ResponseSerializer.serialize(result)},\n",
      "  File \"/home/yul23028/miniconda3/envs/pandasAI/lib/python3.9/site-packages/pandasai/responses/response_serializer.py\", line 29, in serialize\n",
      "    with open(result[\"value\"], \"rb\") as image_file:\n",
      "FileNotFoundError: [Errno 2] No such file or directory: '/home/yul23028/CTI_LLM/exports/charts/temp_chart.png'\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "\"Unfortunately, I was not able to answer your question, because of the following error:\\n\\n[Errno 2] No such file or directory: '/home/yul23028/CTI_LLM/exports/charts/temp_chart.png'\\n\""
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.chat(\n",
    "    \"Plot the histogram of countries showing for each the gdp, using different colors for each bar\",\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_2=pd.read_csv('/home/yul23028/CTI_LLM/data/export_175286_0.csv')\n",
    "df_2 = SmartDataframe(df_2, config={\"llm\": llm})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n",
      "/tmp/ipykernel_1465365/3735610560.py:1: PerformanceWarning: DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
      "  df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'The most frequent place of crash in terms of town name is New Haven.'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_2.chat(\"What is the most frequent place of crash? in terms of name of town?\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pandasAI",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
